package com.jcfk.eam.domain.dto.main;

import com.jcfk.eam.domain.dto.base.EamCustomDTO;
import com.jcfk.eam.domain.dto.mould.EamAssetMouldProductDTO;
import com.jcfk.system.domain.dto.BaseDTO;
import com.jcfk.system.domain.dto.SysAnnexesFileDTO;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 资产台账
 *
 * @author libinghai
 * @email 35738025@gqq.com
 * @date 2024-07-28
 */
@Data
public class EamAssetInfoDTO extends BaseDTO {

    private static final long serialVersionUID = 1L;

    /**
     * 数据版本号
     */
    private Long version;

    /**
     * 资产编号
     */
    @Length(max = 32, message = "资产编号长度不能超过32")
    private String assetCode;

    /**
     * 资产名称
     */
    @Length(max = 50, message = "资产名称长度不能超过50")
    private String assetName;

    /**
     * 资产大类
     */
    private Integer assetKind;

    /**
     * 资产类型主键
     */
    @Length(max = 32, message = "资产类型主键长度不能超过32")
    private String assetTypeId;

    /**
     * 资产类型编码
     */
    @Length(max = 50, message = "资产类型编码长度不能超过50")
    private String assetTypeCode;

    /**
     * 资产类型名称
     */
    @Length(max = 50, message = "资产类型名称长度不能超过50")
    private String assetTypeName;

    /**
     * 资产重要性
     */
    private Integer assetImportance;

    /**
     * 额定功率（KW)
     */
    private BigDecimal ratedPower;

    /**
     * 功率合计（KW)
     */
    private BigDecimal totalPower;

    /**
     * 电源所在轴
     */
    @Length(max = 50, message = "电源所在轴长度不能超过50")
    private String powerAxis;

    /**
     * 资产品牌主键
     */
    @Length(max = 32, message = "资产品牌主键长度不能超过32")
    private String assetBrandId;

    /**
     * 资产品牌
     */
    @Length(max = 32, message = "资产品牌长度不能超过32")
    private String assetBrandName;

    /**
     * 资产型号主键
     */
    @Length(max = 32, message = "资产型号主键长度不能超过32")
    private String assetModelId;

    /**
     * 资产型号
     */
    @Length(max = 50, message = "资产型号长度不能超过50")
    private String assetModelNo;

    /**
     * 资产规格
     */
    @Length(max = 50, message = "资产规格长度不能超过50")
    private String assetSpecification;

    /**
     * 资产状态
     */
    private Integer assetStatus;

    /**
     * 资产数量
     */
    private Integer assetQuantity;

    /**
     * 数量单位
     */
    @Length(max = 10, message = "数量单位长度不能超过10")
    private String quantityUnit;

    /**
     * 制造商主键
     */
    @Length(max = 32, message = "制造商主键长度不能超过32")
    private String makerId;

    /**
     * 制造商编号
     */
    @Length(max = 50, message = "制造商编号长度不能超过50")
    private String makerCode;

    /**
     * 制造商名称
     */
    @Length(max = 50, message = "制造商名称长度不能超过50")
    private String makerName;

    /**
     * 制造商联系人
     */
    @Length(max = 20, message = "联系人长度不能超过20")
    private String makerContactName;

    /**
     * 制造商联系电话
     */
    @Length(max = 20, message = "联系电话长度不能超过20")
    private String makerContactPhone;

    /**
     * 资产产品id
     */
    @Length(max = 500, message = "资产产品主键长度不能超过500")
    private String productId;

    /**
     * 资产产品编号
     */
    @Length(max = 500, message = "资产产品编号长度不能超过500")
    private String productCode;

    /**
     * 资产产品名称
     */
    @Length(max = 500, message = "资产产品名称长度不能超过500")
    private String productName;

    /**
     * 项目id
     */
    @Length(max = 32, message = "项目主键长度不能超过32")
    private String projectId;

    /**
     * 项目编号
     */
    @Length(max = 32, message = "项目编号长度不能超过32")
    private String projectCode;

    /**
     * 项目名称
     */
    @Length(max = 50, message = "项目名称长度不能超过50")
    private String projectName;

    /**
     * 图号
     */
    @Length(max = 50, message = "图号长度不能超过50")
    private String drawingNumber;

    /**
     * 订货号
     */
    @Length(max = 50, message = "订货号长度不能超过50")
    private String orderNumber;

    /**
     * 表头编号
     */
    @Length(max = 50, message = "订货号长度不能超过50")
    private String headerNumber;

    /**
     * 出厂编号
     */
    @Length(max = 50, message = "出厂编号长度不能超过50")
    private String manufactureCode;

    /**
     * 供应商主键
     */
    @Length(max = 32, message = "供应商主键长度不能超过32")
    private String supplierId;

    /**
     * 供应商编码
     */
    @Length(max = 50, message = "供应商编码长度不能超过50")
    private String supplierCode;

    /**
     * 供应商名称
     */
    @Length(max = 50, message = "供应商名称长度不能超过50")
    private String supplierName;

    /**
     * 量检具类别
     */
    private Integer measuringType;

    /**
     * 到货日期
     */
    private Date arrivalDate;

    /**
     * 是否是固定资产
     */
    private Integer isFixedAsset;
    /**
     * 固定资产编号
     */
    @Length(max = 50, message = "固定资产编号长度不能超过50")
    private String fixedAssetCode;

    /**
     * 累计使用次数
     */
    private Integer cumulativeUseTimes;

    /**
     * 资产寿命
     */
    private Integer assetLifespan;

    /**
     * 资产原值
     */
    private BigDecimal originalValue;

    /**
     * 资产折旧后价值
     */
    private BigDecimal residualValue;

    /**
     * 管理部门主键
     */
    @Length(max = 32, message = "管理部门主键长度不能超过32")
    private String manageDepartmentId;

    /**
     * 管理部门
     */
    @Length(max = 50, message = "管理部门长度不能超过50")
    private String manageDepartmentName;

    /**
     * 资产管理人主键
     */
    @Length(max = 32, message = "资产管理人主键长度不能超过32")
    private String assetManagerId;

    /**
     * 资产管理人
     */
    @Length(max = 50, message = "资产管理人长度不能超过50")
    private String assetManagerName;

    /**
     * 使用部门主键
     */
    @Length(max = 32, message = "使用部门主键长度不能超过32")
    private String usingDepartmentId;

    /**
     * 使用部门
     */
    @Length(max = 50, message = "使用部门长度不能超过50")
    private String usingDepartmentName;

    /**
     * 使用人主键
     */
    @Length(max = 32, message = "使用人主键长度不能超过32")
    private String usingPersonId;

    /**
     * 使用人
     */
    @Length(max = 50, message = "使用人长度不能超过50")
    private String usingPersonName;

    /**
     * 使用日期
     */
    private Date usingDate;

    /**
     * 维修部门主键
     */
    @Length(max = 32, message = "维修部门主键长度不能超过32")
    private String repairDepartmentId;

    /**
     * 维修部门
     */
    @Length(max = 50, message = "维修部门长度不能超过50")
    private String repairDepartmentName;

    /**
     * 维修负责人主键
     */
    @Length(max = 32, message = "维修负责人主键长度不能超过32")
    private String repairManagerId;

    /**
     * 维修负责人
     */
    @Length(max = 50, message = "维修负责人长度不能超过50")
    private String repairManagerName;

    /**
     * 位置主键
     */
    @Length(max = 32, message = "位置主键长度不能超过32")
    private String locationId;

    /**
     * 位置
     */
    @Length(max = 50, message = "位置长度不能超过50")
    private String locationName;

    /**
     * 安装位置描述
     */
    @Length(max = 32, message = "安装位置描述长度不能超过32")
    private String installLocationExplain;

    /**
     * 标定周期
     */
    private Integer checkPeriod;

    /**
     * 上次检定日期
     */
    private Date prevCheckDate;

    /**
     * 标定到期日
     */
    private Date nextCheckDate;

    /**
     * 标定地点
     */
    @Length(max = 50, message = "标定地点长度不能超过50")
    private String checkPlace;

    /**
     * 标定人
     */
    @Length(max = 50, message = "标定人长度不能超过50")
    private String checkPerson;

    /**
     * 测量精度
     */
    private BigDecimal measuringAccuracy;

    /**
     * 准确度等级
     */
    private String accuracyLevel;

    /**
     * 测量分度
     */
    private BigDecimal measuringDivision;

    /**
     * 测量范围
     */
    @Length(max = 255, message = "测量范围长度不能超过255")
    private String measuringRange;

    /**
     * 器具属性
     */
    @Length(max = 255, message = "器具属性长度不能超过255")
    private String assetAttribute1;


    /**
     * 企业编号
     */
    private String enterpriseCode;
    /**
     * 备注
     */
    @Length(max = 255, message = "备注长度不能超过255")
    private String remarks;

    /**
     * 入账日期
     */
    private Date accountDate;

    /**
     * 是否停用
     */
    private Integer enabled;

    /**
     * 是否删除
     */
    private Integer deleted;

    /**
     * 组织机构主键
     */
    @Length(max = 32, message = "组织机构主键长度不能超过32")
    private String organizationId;

    /**
     * 创建人
     */
    @Length(max = 50, message = "创建人长度不能超过50")
    private String createdUserName;

    /**
     * 更新人
     */
    @Length(max = 50, message = "更新人长度不能超过50")
    private String lastUpdatedUserName;

    /**
     * 批量删除id-4598888889696888888---+++
     */
    private List<String> ids;

    /**
     * 资产图片
     */
    private List<SysAnnexesFileDTO> assetPhotos;


    List<EamCustomDTO> customs = new ArrayList<>();


    /**
     * 库存状态;库存状态
     */
    private Integer storageStatus;


    /**
     * 资产物料号;模具物料号
     */
    private String materialCode;

    /**
     * 资产重要程度;重要程度
     */
    private Integer importantLevel;


    /**
     * 工序id;工序id
     */
    private String processId;

    /**
     * 工序code;工序code
     */
    private String processCode;

    /**
     * 关联安装设备code;关联安装设备code
     */
    private String equipCode;

    /**
     * 关联安装设备id;关联安装设备id
     */
    private String equipId;

    /**
     * 资产物料id
     */
    private String materialId;
    /**
     * 资产物料名称
     */
    private String materialName;
    /**
     * 模具组合编码
     */
    private String mouldCode;

    /**
     * bomId
     */
    private String bomId;
    /**
     * bom编码
     */
    private String bomCode;

    // 检测记录
    private List<EamPointCheckOrderDTO> listCheckOrder;
    // 检查详情
    private List<EamPointCheckResultDTO> listCheckResult;


    /**
     * 关联产品
     */
    private List<EamAssetMouldProductDTO> products;

    private Integer passStatus;
    /**
     * 模板框ID
     */
    private String mouldPackageId;

    /**
     * 工序
     */
    private Integer process;

    /**
     * 是否客户资产
     */
    private Integer isCustomer;

}
